/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.openide.compiler;
import org.openide.execution.ExecutorTask;
import org.openide.windows.InputOutput;
/** SysProcess class for external compiler executor (CompilerExecutor).
*
* @author Ales Novak
*/
class CompilerSysProcess extends ExecutorTask {
static final int INTERRUPTED = 97943;
/** reference to external prcess */
private Process process;
/** reference to parsing thread - err */
private ErrorsParsingThread thr1;
/** reference to parsing thread - std */
private ErrorsParsingThread thr2;
/** Foreign ExecutorTask */
private ExecutorTask him;
/**
* @param eCompiler
* @param classPath
* @param proc is a Process obtained from Runtime.exec call
*/
CompilerSysProcess(Runnable run, ExternalCompilerGroup eCompile, String classPath, Process proc, ExternalCompiler.ErrorExpression err) {
super(run);
process = proc;
thr1 = new ErrorsParsingThread(proc.getErrorStream(), eCompile, classPath, err, null);
thr1.start();
thr2 = new ErrorsParsingThread(proc.getInputStream(), eCompile, classPath, err, thr1);
thr2.start();
Thread.yield();
}
/** destroys the process */
public void stop() {
process.destroy();
thr1.stopParsing(true);
thr2.stopParsing(true);
him.stop();
}
/** waits for the end of external compiler */
public int result() {
try {
int ret = process.waitFor();
return ret;
} catch (InterruptedException e) {
process.destroy();
return INTERRUPTED;
} finally {
thr1.stopParsing(false);
thr2.stopParsing(false);
notifyFinished();
}
}
public String getName() {
return ""; // NOI18N
}
public InputOutput getInputOutput() {
return him.getInputOutput();
}
public void setExecutorTask(ExecutorTask et) {
him = et;
}
public void run() {
}
static class InterruptedProcess extends ExecutorTask {
InterruptedProcess() {
super(null);
}
public void stop() {
}
public int result() {
return INTERRUPTED;
}
public InputOutput getInputOutput() {
return InputOutput.NULL;
}
}
}
/*
* Log
* 7 src-jtulach1.6 1/12/00 Ian Formanek NOI18N
* 6 src-jtulach1.5 1/10/00 Ales Novak stopCompile action
* 5 src-jtulach1.4 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 4 src-jtulach1.3 10/1/99 Ales Novak major change of
* execution
* 3 src-jtulach1.2 9/14/99 Ales Novak upgrade to
* org.netbeans.lib.regexp.*
* 2 src-jtulach1.1 6/8/99 Ian Formanek ---- Package Change To
* org.openide ----
* 1 src-jtulach1.0 3/28/99 Ales Novak
* $
*/